package automatas;

import componentesFisicos.*;

import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;

public class Estado {

	private List<Componente> elementos;
	private List<Double> posiciones;
	private Double posicionProducto;
	private boolean motor;
	
	public Estado(){
		elementos=new LinkedList<Componente>();
		posiciones=new LinkedList<Double>();
		this.motor=false;
		
	}
	
	public Estado (Estado otro){
		this.posicionProducto=otro.posicionProducto;
		this.motor=otro.motor;
		this.elementos=otro.elementos;
		this.posiciones=new LinkedList<Double>();
		Iterator<Double> it = otro.posiciones.iterator();
		while(it.hasNext()){
			this.posiciones.add(new Double(it.next().doubleValue()));
		}
		
	}
	
	
	public void setPosiciones(Estado otro) {
		this.posiciones=new LinkedList<Double>();
		Iterator<Double> it = otro.posiciones.iterator();
		while(it.hasNext()){
			this.posiciones.add(new Double(it.next().doubleValue()));
		}
	}

	public Double getPosicionProducto() {
		return posicionProducto;
	}

	public void setPosicionProducto(Double posicionProducto) {
		this.posicionProducto = posicionProducto;
	}
	
	public void setPosicionProducto(Producto p) {
		if(p==null){
			this.posicionProducto=-1.0;
		}else{
			this.posicionProducto = p.getPosicion();
		}
	}

	/**
	 * @return the elementos
	 */
	public List<Componente> getElementos() {
		return elementos;
	}
	
	public boolean isMotor() {
		return motor;
	}

	public void setMotor(boolean motor) {
		this.motor = motor;
	}

	public void insertarElemento(Componente nuevo,double posicion){
		elementos.add(nuevo);
		posiciones.add(new Double(posicion));
	}
	
	public Componente obtenerElemento(int posicion){
		Componente aDevolver=elementos.get(posicion);
		return aDevolver;
	}
	
	public double obtenerPosicion(int posicion){
		double aDevolver=(posiciones.get(posicion)).doubleValue();
		return aDevolver;
	}
	
	public void setPosicion (int posicion, double nueva){
		posiciones.set(posicion, new Double(nueva));
	}
	
	public void eliminarElemento(double posicion){
		elementos.remove(posicion);
		posiciones.remove(posicion);
	}
	
	public int numeroElementos(){
		return elementos.size();
	}
	
	public String toString(){
		StringBuffer buffer = new StringBuffer("");
		for(int i=0; i<this.elementos.size(); i++){
			if(this.elementos.get(i).isEncendido()){
				buffer.append("1");
			}else{
				buffer.append("0");
			}
		}
		buffer.append(" "+this.posicionProducto);
		return buffer.toString();		
	}
	

	
	
}
